跳到主要内容

第五期:扩展 NAS 之远程访问

如何「远程访问 NAS」是一个经常被人提及的话题,因为一旦实现,就能让前几章提到的功能不再局限于局域网内,让 NAS 真正成为一台可以随时随地访问的云设备,大大提升 NAS 的便利性。

与之对应的,便是远程访问 NAS 这一问题本身的复杂性。

与前几章不同,在 NAS 上安装各类服务只需保证机器正常运转,局域网内的路由器、网线、电脑不出问题。而远程访问则涉及到诸多问题——远程访问 IP、端口映射、内网穿透、线路是否通畅。在国内还需要考虑公网 IP、端口转发、上下行速度等额外的问题。这些问题中,有的缺一不可,有的影响体验,有的无伤大雅……这些术语显得有些复杂,但不必担心,它们都会在本章中得到解答。

远程访问的几种思路

很多初上手 NAS 的用户会发现,单靠网上的一篇篇文章并不能很好地解决「远程访问」的问题,所以往往是参考了很多文章,试了很多种方法,绕了很多弯路,才实现了远程访问。这是因为有不少分享者更重视解决眼下问题,而非成体系地讲解如何在国内的复杂环境下、以多种方式实现远程访问。

「远程访问到底为什么这么难?」其实是因为缺乏对整体的思路,很容易被大量的专业术语整晕。因此我希望大家能认真阅读这段内容,然后再根据自己的实际情况实现远程访问,少走一些我当时走过的弯路。

在一切开始之前,需要注意第一章就让大家准备起来的两个关键点:公网 IP 和上传速度

为了更快的访问速度,提升上传速度很容易理解,毕竟谁都想要更快的网速。

为什么拥有一个公网 IP 如此重要呢?因为这个公网 IP 的有无,直接决定了你需要采取什么样的方法来实现远程访问。本期文章的所有内容都因它而起。

如何区分多种 IP 地址的概念

讲到 IP 地址会引出很多概念,这里只挑最关键的两组概念简单讲解——

公网与内网 IP:

  • 公网 IP:可以从任意位置访问的 IP 地址。
  • 内网 IP:只有局域网内可以访问(有时候整个小区或宿舍楼共用一个 IP 地址,因而无法从外部访问内部设备,这种情况下也算是内网 IP)。

静态与动态 IP:

  • 静态 IP:固定的 IP 地址,通常由企业付费持有。个人很难持有一个 IPv4 的静态 IP 地址。
  • 动态 IP:随着路由器重启而改变的动态 IP 地址。这让个人很难直接用 IP 地址远程访问 NAS。

https://cdn.sspai.com/2020/12/09/84588bc9c7403a458333f1a96706a66c.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

如何区分多种 IP 地址概念

最理想的情况下,我们当然希望有一个「公网 + 静态 IP」,这样我们就能直接通过类似 109.31.12.18:5000 这样的 IP 地址 + 端口访问到 NAS 的管理界面了,远程访问的问题就解决了。

但是事与愿违,首先是静态 IP 非常稀缺,通常是大企业付费获得。运营商认为普通用户只需要上网,用动态 IP 就能够满足绝大多数的上网功能,并且大大缓解了 IP 地址不够用的压力。

这就产生了第一个问题:动态 IP 难以访问。比如我的 NAS IP 地址今天是 109.31.12.18:5000,路由器一重启就变成了 50.38.201.78:5000,这个变化并没有规律可循。这就让事情变得复杂了。

第二个问题在于公网 IP,国内运营商出于某些考虑,不允许人人在自家随便开放网站服务,因此默认是不给公网 IP 的,并且封闭了 80、443 等常用的网页访问端口。不给公网 IP 可以打电话找运营商要一个,但外网端口就需要自己搞定了。

这就是整篇文章的两个核心问题,本文接下来的一切方案都是为了解决这两个问题。

如何解决动态 IP 问题

为了解决动态 IP 的问题,让自己更方便地从外网访问到 NAS,NAS 厂商和用户都找了各种各样的方法。

https://cdn.sspai.com/2020/12/09/5b818b44e43e456610837b306ab11c76.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

动态IP的概念

方案一:群晖作为厂商,敏锐地意识到了这个问题,因此提供了非常方便的方案,也就是 QuickConnect 服务。QuickConnect 使用起来非常简单,用户只需要在 NAS 上设置一个独一无二的 QuickConnect ID,通过群晖提供的 https://ID.quickconnect.to 服务,就可以直接找到对应 ID 的 NAS IP 地址,从而实现远程访问。

方案二:用户也找到了自己的路子,不借助群晖的服务也能实现远程访问——「申请一个域名,让 NAS 自动上报最新的 IP 地址,用域名访问 NAS」,这种思路叫「域名解析 + DDNS」。这一方案体验也非常不错,难点在于国内做域名解析是需要备案的,并且购买域名通常是要每年付费的,配置过程会涉及到一些代码知识。

这方面群晖也提供了一些免费的 DDNS 网址,比如 https://ID.myds.me,访问时可以免去等待 QuickConnect 查询的步骤,所以使用时会稍快一些。

如何解决无公网 IP 问题

如果说动态 IP 是几乎每个国内 NAS 用户都需要解决的问题。那么,有没有公网 IP,则直接决定了你外网访问的难度。

为了解决公网 IP 的问题,让 NAS 「能」从外网访问,最快的方法就是我第一期提到的——「找运营商开启这个服务」。

https://cdn.sspai.com/2020/12/09/228180f327c3a20a92b132e4871cdcfe.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

公网IP

至于如何确认是否已经有了公网 IP,你可以通过 IP 查询网站如 ipip.net 来查询自己的 IP 地址是动态还是静态(通常是动态),通过路由器后台查询 WAN IP 地址是否与之一致,一致则说明已有公网 IP。(可以回到第一章查看如何查询和申请公网 IP 的具体方法。)

但如果没有办法申请到公网 IP,事情就会变得比较复杂,你需要实现「内网穿透」。这需要购买域名、租一台外部服务器,实现 DDNS 的中转,并且配置工作非常冗长。不过也有一些服务商是专门为「无公网 IP 用户」解决内网穿透问题的,如果嫌麻烦可以直接付费购买此类服务图个省心。

而也有一些没有公网 IP 的情况属于硬件层面无法实现的,比如校园网就几乎不可能允许你从外网访问。

如何解决内网配置问题

这两个核心问题解决了,就一定能够从外网访问了吗?未必,因为每个人的路由器配置还不太一样。很多人做了 DDNS 和内网穿透,也还是不能远程访问。这就好比客人已经找到家门口,路由器却把客人拦住了,不让客人碰家里的东西。

这往往是因为路由器配置不正确,需要做「端口映射」操作,让客人能够从外部触碰指定的几个功能,而不是全权开放给客人。端口映射也可以绕过运营商对 80、443 等端口的封锁。

https://cdn.sspai.com/2020/12/09/008dd5d53f5401eaa1a1c73f0fdee88b.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

端口映射

还有就是向运营商申请提升上行速度,如果你经常需要在外网读取 NAS 中的大文件,这时候就要看局域网的上传带宽了。如果家中是 10 兆的上传带宽,那么在外网下载速度就是 1.25 MB/s,用来看高清视频恐怕比较费劲。这就属于花钱改套餐能解决的用户体验问题。

正因为可能出现问题的环节如此之多,才导致了远程访问配置起来这么复杂。本文会尽可能完整地描述同类问题的解决思路,一些具体的配置过程需要大量的图文会更有帮助,篇幅所限,我会给出相应的文章链接供大家参考。

远程访问 NAS 的自动配置方案

正如前面所说,网络环境千差万别。做了相同的操作也会出现不同的问题。如果一上来就讲如何操作而不讲原理,那就无法学会自己排查网络中出现的问题。

首先我们要知道,想要从外部网路访问到自家 NAS,并不是一键直达的。同样是「打开手机访问家中的 NAS」这一操作,对用户而言看似只有「能访问」和「不能访问」这两种情况。但实际上流量会经过多个关键性节点才能完成这一跳转,我来举两个常见的例子方便大家理解。

https://cdn.sspai.com/2020/12/09/ba4d9c3f539c03f82763dc34314b6015.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

外网访问流程

  1. 你用手机打开浏览器 → 访问家中路由器 IP 地址 → 网络通过 IP 找到家中路由器 → 路由器找到局域网内的 NAS 设备 → NAS 提供数据原路返回 → 手机获得数据。
  2. 你用手机打开浏览器 → 访问 NAS 的 QuickConnect 码 → 通过群晖服务器解析到家中 IP 地址 → IP 对应路由器 → 路由器找到 NAS 设备 → NAS 提供数据原路返回 → 手机获得数据。

从中我们可以发现,数据至少经过了「手机 - IP - 路由器 - NAS」这几个阶段,难点就在这几个地方。如果你不想面对这些难点,群晖已经提供了很不错的解决方案:QuickConnect。

方案一:QuickConnect 方案(群晖)

QuickConnect 是群晖独家的服务,是目前外网访问 NAS 最简单易用的方案之一。它的作用是通过一串「唯一的代码」来快速访问到家中的 NAS。群晖自家的 App 都支持 QuickConnect 来直接访问。

https://cdn.sspai.com/2020/12/09/6e1ace2c24beb0d2f9fdcaee88925258.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

QuickConnect 码的作用

申请 Synology 账号

这一步应该在初次打开 NAS 的时候就注册过了,如果还没有账号,可以在群晖的官网进行账号申请。

申请 QuickConnect ID

接着就是在 NAS 的控制面板中设置 QuickConnect ID。打开 NAS 网页版 - 控制面板 - QuickConnect - 启用。

https://cdn.sspai.com/2020/12/09/2f5e8590f052f82f8fa6c7b074b91e6b.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

设置QuickConnect

填写一个唯一的 ID 码,以后就可以通过这个 ID 码来访问 NAS 了。

通过 QuickConnect 访问 NAS

外部访问 NAS 有两种场景,一种是通过浏览器,一种是通过 App。

在设置完 QuickConnect 后,下方就会出现提示,告诉你如何访问这台 NAS。

  • 浏览器访问:https://ID.quickconnect.to(ID 为刚刚输入的代码)或https://quickconnect.to/ID,稍等一会儿就能进入 NAS 的管理界面。
  • App 访问:在登录界面的 QuickConnect 码一栏输入 ID,账号密码均为 NAS 网页端账号密码。

https://cdn.sspai.com/2020/12/09/f063e338f67ea9e669fba62fc5f1ad40.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

QuickConnect连接

QuickConnect 不适用的情况

QuickConnect 能自动解决大部分问题且不需要做额外设置,但并非十全十美,它不能保证让你 100% 实现外网访问。

第一章我就提到过,由于运营商限制,如果 NAS 处于公用网络(校园网、宿舍网、公共场所局域网)、使用路由光猫作为主路由器、小区共用 IP、偏远位置等特殊网络环境下,网络本身不具备外网访问的条件,自然也无法通过 QuickConnect 访问,甚至无法通过任何方式从外部访问。

另外,由于访问到你的 NAS 前需要做一次跳转,https://ID.quickconnect.to 并不是 NAS 的真实链接,所以不支持通用协议 WebDAV。如果你想在支持 WebDAV 的应用中使用 NAS 作为存储位置,那就需要准备其他的方式了。

还有一种情况是 QuickConnect 能够跳转但无法显示内容,这种通常是正确解析到了路由器的 IP 地址,但由于路由器设置不正确,无法通过路由器找到 NAS。群晖的服务器通常没有问题,那么问题显然出在路由器到 NAS 这一步上。通常需要在路由器的设置界面正确设置端口转发、端口映射、开启 DMZ 功能、开启 UPnP 功能(如果没有设置项,可能默认开启,也有可能不支持,需要更换路由器),这些问题会在后面讲到路由器设置时详细讲解。

QuickConnect 是我最推荐的方案之一,能以最省心的方式在外网访问到 NAS。

方案二:EZ-Internet 方案

当 QuickConnect 无法满足需求时,就需要寻求其他的方案来实现外网访问了。

群晖提供了另一项功能 EZ-Internet,能够帮助用户快速解决网络环境下的各种问题,对防火墙规则、PPPoE、DDNS、端口转发这些问题一次性解决,简化了手动操作。即便你对这些名词完全不了解,也能完成配置。

我们先通过 EZ-Internet 进行一遍设置,如果无法解决,再到路由器端进行手动设置。

由于 EZ-Internet 的很多操作是在路由器端进行,路由器需要支持 UPnP 功能才能通过 EZ-Internet 进行设置。如果不支持,则至少需要支持手动设置端口转发。

具体操作:

  1. 访问 DSM 网页端,进入系统自带的 EZ-Internet 设置向导。
  2. 一般来说我们选择「通过路由器」这一项,如果家中有条件直接插上网线连接网络,则选择「PPPoE 或直接连接」这一选项。
  3. 之后根据实际情况进行「端口转发」「防火墙」「DDNS」的设置。这跟路由器也有关,经过 EZ-Internet 的检查后,参考它的结局方案来排查问题。比如图中需要联系电信将光猫改为桥接模式。

https://cdn.sspai.com/2020/12/09/5a4fb4ec7bde68f320d281b3b3d91e5b.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

EZ-Internet

完成设置之后,就可以通过外网进行访问了。

使用 EZ-Internet 需要注意以下几点——

  • EZ-Internet 会将路由器原本的端口转发规则覆盖。
  • 如果进行 EZ-Internet 设置后仍然无法正常外部访问,就需要手动进行路由器设置。如路由器不支持,则建议更换路由器。
  • EZ-Internet 可以和 QuickConnect 共存,可以同时启用。

方案三:第三方付费服务

市面上其实有不少第三方的外网访问解决方案,这些付费服务商通过自己的服务器也能搞定外网访问的大多数问题。体验与群晖的 QuickConnect 比较接近。

这类服务有不少,像花生壳、网云穿、神卓互联等都是内网穿透的服务商。它们的原理通常是在本机电脑或 NAS 上安装一个客户端;或者购买一个硬件设备放在局域网中,实现 IP 地址的动态调整。

https://cdn.sspai.com/2020/12/09/16dbf7132fd84e54692d290de5af32e9.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

花生壳内网穿透方案 / 来自官网介绍

这样的好处是不需要公网 IP、操作简便、管理方便、实现远程访问 NAS 之外还能远程访问 PC,适合追求稳定的企业级客户使用。部分服务商还会提供一些便于访问的域名。

代价则是每年支付服务订阅费用,每年数百元的价格对家庭用户而言并不算低。

如果你不愿意为此付款,希望选择免费开源的服务,那就需要花时间折腾和配置,需要一定的网络和调试基础。

远程访问 NAS 的手动配置方案

群晖、第三方的解决方案确实解决了各种各样的问题,尽可能地减少了用户的操作。让所有用户不必考虑路由器、外部网络环境等因素,想必是群晖的目标之一。

不过在目前这个各家厂商、各个用户的软硬件差异极大的时代,实现这一目标就需要产生统一的协议或标准,目前看起来仍需时日。因此手动配置方案依然值得一讲。

在手动配置之前……

与自动配置不同,手动配置会涉及到各种网络知识,引出不少专业名词,其中的每一点都需要大量的网络知识作为支撑,所以我会在不涉及到背后复杂的原理的情况下,尽量用通俗的语言为大家讲解,从实用的角度为大家提供建议。

https://cdn.sspai.com/2020/12/09/01190a621b92090caa46ff5779e70b7c.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

手动配置方案

手动配置方案可以分为两种情况:

  1. 有公网 IP 时,使用 DDNS 方案(方案四)
  2. 无公网 IP 时,使用内网穿透方案(方案五)

💡 TIPS:关于专业名词

很多人初次查阅各种资料时,经常被各种专业名词/术语整懵,因为这些名词不加以解释,就很难明白它们的实际作用和想要实现的目标。如果只是一步一步跟着做,那就无法针对自己的网络环境进行灵活变通。

为了让大家的阅读体验更流畅,这里做一个对专业名词的快速介绍,以及它们可以完成什么样的工作,方便大家理解这些名词的含义。

这些手动配置方案中会提到不少专业名词,我会以这种 TIPS 的形式进行补充。

方案四:有公网 IP 时,DDNS 方案

脱离了自动配置方案的帮助,我们遇到的第一个问题就是上面讲到的动态 IP。

只要理解了 IP 和域名之间的对应关系,我们就会知道——如果希望通过一个域名来访问家中的路由器,那就需要将家中路由器的 IP 地址与这一域名绑定。

💡 TIPS:IP 与域名对应,实现基本访问

这是网络中最基础的概念,IP 和域名存在对应关系,理解了这一层,才能实现最基本的通过 IP 访问 NAS。

  • IP 地址:网络中用于确定一台设备的逻辑地址,就像这台设备的手机号,形如 48.211.120.52
  • 域名:域名是 IP 地址的别称,域名会通过 DNS 解析成 IP。就像与手机号对应的名字,形如 google.com
  • 解析:可以简单理解为 IP 和域名的处理过程,将域名转化为 IP。
  • DNS:DNS 记录着大量域名和 IP 的对应关系,就像一本厚厚的通讯录。比如从外部访问 sspai.com 时,首先通过 DNS 找到 sspai.com 的 IP 地址是 119.23.141.248,然后将你导航到这个 IP 地址上,完成访问。
  • DDNS:DNS 是域名解析服务,DDNS 是动态域名解析服务。DDNS 的作用是将一个域名和动态的 IP 地址绑定起来,每次用户访问域名时,跳转的 IP 都是最新的 IP 地址。这是一个更智能的通讯录。比如 powerplus.myds.com 昨天的 IP 是 210.12.101.75,今天由于路由器重启,变成了另一个 119.23.141.248。借助 DDNS 技术,从外部访问时总能导航到正确的、最新的119.23.141.248。群晖的 QuickConnect 服务就提供了类似的功能。

如果想通过「域名」这一简单的方式来访问 NAS,就需要用到 DDNS 来保证域名和 IP 是对应的。

如果想通过 IP 直接访问 NAS,你就需要经常去关注 NAS 的外网 IP 是否有变动,这显然不现实——谁会没事检查一下 IP 地址有没有变化呢。

如果想按照对待服务器的方法,通过域名映射到 NAS IP 的固定值,那么一旦重启路由器就需要域名的配置,重新进行域名解析……这也太麻烦了。

因此这项工作就要由 DDNS(动态域名服务)和端口转发这一组合来完成,通常需要这几个步骤:

  1. 购买自定义域名(或使用群晖提供的免费域名)
  2. 配置 DDNS
  3. 配置端口转发

群晖本身提供了一些 DDNS 域名,可以用 myDS.me 这类较短的域名进行配置。

域名分支一:使用群晖提供的免费域名

群晖官方提供了一些免费域名,在「NAS 网页端 - 控制面板 - 外部访问 - DDNS - 新增」中,可以选择服务提供商 Synology,这里给出的 myDS.mei234.meFamliyDS.com 等域名后缀都是可以免费使用的。

https://cdn.sspai.com/2020/12/09/b440fb6be097bb7d918f3063c1752cda.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

域名服务

选择完喜欢的域名后缀,再输入一个主机名称,比如 allen.myds.me。然后分别填入用户名、密码。剩余的外部链接、状态会自动填入和检测。保存即可。

域名分支二:使用自定义的域名

如果不想用群晖官方的域名,那就需要购买一个。

如今,购置域名已经变得非常容易,在域名服务网站(如 DNSPod)上购买一个不常见的域名(热门域名价格较高),一年的价格在 50–80 元之间。如果选择非 .com 结尾的域名,如 .fun.link 这种冷门域名,还能进一步降低成本。

几个注意点:

  • 同一个域名,在不同的域名服务网站购买,价格也有所不同,注意比较。
  • 也有一些免费的域名服务商,但要警惕它们的后续收费和域名所有权问题,不推荐选择免费服务商。

至于域名名称,根据自己的喜好进行设定和购买就可以了。

购买完成后,一般步骤如下

  1. 添加一条 A 记录域名解析,比如 nas.allen.com,这个就是主机名,其中的前缀可以自行定义。
  2. 根据官网提示申请 API Token,API Token 包含 DDNS 设置所需的用户名和密钥。
  3. 同样在「NAS 网页端 - 控制面板 - 外部访问 - DDNS - 新增」中选择服务提供商为你的服务商(如 DNSPod.cn),主机名称就是上面的 前缀.域名.com

https://cdn.sspai.com/2020/12/09/33ef1b2a20064d639685bedd4f492bb5.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

Token填写

💡 TIPS:Token 的获取

部分服务商(如阿里云)是利用 Access Key Id 和 Access Key Secret 来生成 DDNS 所需的 Token 的,需要额外自行下载 SDK 和命令行来生成,提高了安全性但也大大增加了工作量

建议在购买时就选择 DNSPod 等直接生成可用的 Token 的域名服务商,有助于我们在 NAS 中快速配置。

域名分支三:非群晖 NAS 使用自定义域名

如果是非群晖的 NAS,则需要在 NAS 上编写脚本,通过 API 的方式每隔 1 小时更新一次解析的 IP 地址,实现 DDNS。

不同的机型有不同的配置方案,这部分难以涵盖所有情况,这里举 DNSPod 的例子来讲。

  1. 首先我们在域名控制台添加一条域名解析 A 记录,IP 地址为目前 NAS 的公网 IP。

  2. 为了让这条 A 记录动态改变,我们要通过 API 对它进行实时更新。所以需要获取这条 A 记录的「记录 ID」。

  3. 你可以通过运行这段 Python 脚本来获取「记录 ID」,其中带 【】 的内容是需要修改的。

# -*- coding: UTF-8 -*-
import urllib2,urllib
data={'login_token':'【API Token ID】,【API Token 密钥】','format':'xml','domain':'【域名】'}
content_stream = urllib2.urlopen("https://dnsapi.cn/Record.List",data=urllib.urlencode(data))
content = content_stream.read()
print content
  1. 完成后,DNSPod 会返回一个 XML 文件,其中包含一个 ID 值,有了这个 ID 值,我们就可以通过计划任务来实时更新这条记录了。

  2. 在 NAS 中定时执行下面这段脚本,脚本实际上是发送了一条 API Post,将当前的 IP 地址发送到这条记录。

curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=【API Token ID】,【API Token 密钥】&format=json&domain=【域名】&record_id=【记录的ID】&record_line=默认&sub_domain=【域名的前缀】'

这几种分支都能实现 DDNS 动态解析。

但是做到这里,大概率还是不能直接访问,因为路由器端还没有做端口转发的设置,外部的请求在路由器这里被拦截了下来。所以接下来看看如何配置路由器的端口转发。

💡 TIPS:端口转发,实现 NAS 开放到外网

一台 NAS 上可以同时提供多种服务,这些服务会采用不同的端口。这里就要用到端口映射,让你从外网顺利地访问 NAS 的各种服务。

  • 端口:如果把 IP 地址比作房子,那么端口可以理解为一扇门,端口最多可以有 65535 个,也就是 2¹⁶–1 个。不同的门可以用于提供不同的服务。比如网页服务通常采用 80 端口,FTP 服务通常采用 21 端口,群晖的管理页面被设为 5000 端口。
  • NAT:网络地址转换,就是把本地地址(如 192.168.1.200)转换为全球可访问的 IP 地址(就是公网 IP)。目前使用最广泛的就是端口多路复用,让局域网内所有设备共享一个外部 IP,通过端口来识别不同设备和服务,最大程度节省 IP 资源。
  • 端口映射:端口映射是 NAT 地址转换的一种,想要让 NAS 对外网开放服务、接收数据,都需要端口映射。通常实现方法是在网关(路由器)上开放一个端口如 86,然后将这个端口接收到的数据映射到 NAS 的 80 端口上。这样在外网访问 http://外网IP:86 时,实际访问到的页面就是 http://192.168.1.200:80,即 NAS 的网页服务器。
  • 端口转发:端口转发(Port Forwarding)和端口映射(Port Mapping)作用类似,但原理有所不同。简单讲就是「转发关系」和「对应关系」的区别,转发的安全性稍高一些。在 NAS 这里讲到,一般都是为了实现同一个目标,不必过于强调两者区别。
  • 网关:可以理解为网络的关卡,连接两个不同网络的设备都可以叫网关,家庭场景下通常就是路由器。

通过配置端口转发,可以绕过运营商对 80、443 等常用端口的封锁。

配置端口转发

端口转发实际上是路由器的事,路由器中通常有多种描述——端口映射、DMZ 和 UPnP,他们分别是什么意思,又能做什么,到底怎么配置呢?

下面是对端口映射、DMZ 和 UPnP 的详细解释。

端口映射:就是将路由器的端口与 NAS 的端口之间连上线,建立起联系。当你访问路由器时,就会将请求自动转到映射的端口上。端口映射能够绕过一些限制,也可以避免将 NAS 的真实端口暴露到外网。

通俗地讲,比如你想让 NAS 在 80 端口上运行网页服务器。但运营商通常会封掉网页访问常用的 80 端口,导致我们无法正常访问 NAS 的网页服务器。那就可以将 NAS 的 80 端口和路由器的 86 端口映射起来,你就可以通过 180.63.xxx.44:86 的形式来访问 NAS 的网页服务器了。

DMZ 功能:全称是 Demilitarized Zone,隔离区。它能够解决外部访问会被防火墙阻挡,导致不能访问内部网络服务器的问题,既能将局域网内的一台设备完全暴露给互联网,又能保护其他局域网设备的安全。

DMZ 就是为了让外网能访问内部的资源。如果为 NAS 开启了 DMZ,相当于映射了所有的端口。当外部设备访问你的路由器 IP 的 8080 端口时,就会直接访问 NAS 的 8080 端口,不会影响其他电脑的运行。但相应的,NAS 本身的其他端口同样能被外部访问,有潜在的安全隐患。

UPnP 功能:全称是 Universal Plug and Play,通用即插即用。如果不想了解背后的原理,可以简单的理解为「自动端口映射」。它的作用是 NAS 可以向路由器请求自动进行端口转换。

但是 UPnP 需要由操作系统、应用、路由器协商开放特定的端口,必须同时满足支持 UPnP 才能使用,如果你在路由器中看到了一些凭空出现的端口映射条件,很可能是某些服务通过 UPnP 自动创建的。

https://cdn.sspai.com/2020/12/09/e656a7ba6c7073cd622b40b7494cb426.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

路由器设置

推荐方案:这三者有各自的应用场景,也可以同时开启。比较推荐的方案是做如下操作——

  1. 对运营商屏蔽的 80 端口进行端口映射,映射到 86、87 等其他端口。
  2. 对一些常用服务的端口(比如 DSM 的 5000、WebDAV 的 50055006)进行端口映射的配置,和外网一一对应即可。
  3. 开启 UPnP 允许服务自行创建端口。

如果依然无法访问,最后再试试为 NAS 开启 DMZ 功能。开 DMZ 时要注意内网安全

如果你不知道群晖的服务用了哪些端口,可以参考《Synology 服务使用哪些网络端口?》进行查询。

如果开了 DMZ 再不行,就要试试内网穿透了。

方案五:无公网 IP 时,内网穿透方案

内网穿透是为没有公网 IP 的用户提供的方案。

💡 TIPS:内网穿透,实现无公网 IP 访问 NAS

国内大多数普通家庭都没有静态 IP,有时候甚至没法申请到公网 IP,所以通常要借助内网穿透技术来实现「外网稳定访问 NAS」这一目标。

内网穿透的定义是「不同局域网内的主机之间通过互联网进行通信的技术」。可以简单地理解为「让外网设备顺利访问本地应用的技术」,典型的实用场景是在外网打开本地局域网中的 NAS。

上面的方案三,通常就使用到了内网穿透方案,实现无公网 IP 访问 NAS。

在内网穿透方面,有不少开源项目可以使用,比较常见的是 Ngrok、FRP、NPS 等方案。

但是难点在于,你除了需要购买域名,还需要自己租用一台外部服务器,作为实现 DDNS 的中转服务器

注意:Ngrok 和 FRP 的的配置工作非常冗长,不同的网络环境下,你需要具备解决配置过程中遇到的问题的能力,可能需要额外学习配置 Linux 服务器、网络配置、防火墙配置等相关知识。也正因如此,如果你只希望能够让 NAS 可以远程访问,那么前几个方案已经足够达成目标了,不太推荐新手在这方面花费太多时间。

如果你想了解一下配置的流程,推荐阅读博客里的这篇文章《用开源免费的内网穿透工具 frp,实现远程桌面和文件传输》,文中将 frp 的配置流程写得非常清晰,是针对 PC 电脑配置的方案。你可以借此预估一下配置工作量,来决定是否需要操作。

本文中我简述一下在 NAS 端的配置过程。

Ngrok 方案

Ngrok 步骤概述:

  1. 安装 Linux 环境(虚拟机、服务器端均可)。
  2. 在 Linux 环境下获取 Ngrok 源码并进行编译,生成分别用于服务端和客户端的文件。
  3. 配置域名的解析记录、为域名生成证书。
  4. 在服务器端部署 Ngrokd 文件,通过指定的证书、域名、端口来启动 Ngrok 服务。
  5. 在 NAS 端部署 Ngrok 文件。
  6. 完成,可以尝试在外网访问 NAS 了。

🔗 Ngrok 官方 GitHub

如果嫌麻烦,可以通过网友编写的一键部署脚本,在服务端快速完成安装。

🔗 Ngrok 服务器端一键部署脚本(网友 @clangcn 编写)

最终可以实现在远程访问 https://powerplus.myds.me 直接跳转到 https://powerplus.myds.me:443 上,并且不需要有公网 IP。

FRP 方案

FRP 同样是一个具备内网穿透、反向代理功能的应用。FRP 的配置相对简单,可以不用编译,修改 frps.ini 文件和安装服务的方式进行配置。

大致的做法也是在外部设备和内网设备上安装 FRP 服务端和客户端,配置之后能够实现外网访问。访问速度由 VPS 的速度限制。

由于涉及到大量代码,需要详细步骤的可以在它的官方 Github 找到中文教程并一步一步跟着操作。

🔗 FRP GitHub 中文说明文档

基于开源方案的小服务商

还有很多基于 Ngrok、FRP 二次开发的小服务商,如 Ngrok.ccNatapp.cn  等。他们提供或免费或付费的服务,嫌自己租服务器和配置麻烦的朋友,可以寻求他们的帮助。

较难实现远程访问的情况

在国内的网络环境下实现外网访问是有一些客观难题的,除了开头提到的公网 IP 问题上下行带宽问题,还有几种比较难以实现远程访问的情况,这里给出一些参考建议。

Q:运营商封锁了我家的 80、443 端口,导致无法访问,怎么解决?

A:通过端口映射从其他端口(如 86 端口)访问 NAS 的 80 端口。

Q:我家是二级 ISP 服务商,比如长城宽带,他们不提供公网 IP 怎么办?

A:首先要尽力申请公网 IP,如果实在不提供,实现外网访问的可能性很低。可以尝试做内网穿透方案,但为了长远考虑,还是建议考虑更换宽带服务商。

Q:我的路由器不支持/找不到端口转发等设置?

A:可以先通过 QuickConnect 或 EZ-Internet 尝试自动配置,如果依然不行,建议更换路由器。如有动手能力且路由器支持,可以为路由器刷 OpenWrt 之类的第三方固件。

Q:我家使用的是「电信定制光猫」等特殊网关,是不是不支持外网访问?

A:需要分情况讨论,通常有这几种解决方案:

  1. 常规方式是给运营商致电,申请将光猫改成桥接模式,再由路由器分配。(这一步相当于将光猫的工作放权给路由器来做,而路由器的限制会少一些)
  2. 购买第三方光猫替换原有光猫。如有动手能力,也可以尝试破解光猫,此处不细讲。
  3. 开启光猫的 DMZ 功能,直接映射到路由器或者 NAS。

其他可选操作

如何获取 HTTPS 认证

当你通过群晖的域名服务设置 DDNS 时,如果此前没有 SSL 证书,系统会自动分配给你一张 Let’s Encrypt 的免费证书。

SSL 证书的作用是传输数据添加一层加密防护。当你访问 NAS 的 HTTPS 网页、邮件、FTP 时,SSL 证书能够以加密的形式传输数据,保障数据不会被人攻击和恶意篡改。

HTTPS 证书的认证在「控制面板 - 安全性 - 证书」中新增证书,添加免费或付费的证书。

https://cdn.sspai.com/2020/12/09/c51e38f7ef07ecc786e01fe12ce30663.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

申请证书

证书添加完毕之后,还需要在「控制面板 - 安全性 - 证书」中点击「配置」,将新增的证书作为所有服务的默认证书。这样就配置完毕了。

https://cdn.sspai.com/2020/12/09/c2b8118b594e3603141fa21c9e416a0f.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

配置证书

如何反向代理去掉端口号

端口号是一个麻烦的东西,包括在做 HTTPS 认证的时候,都会发现不支持带端口号的域名链接。我们可以通过反向代理的方式去掉端口号。

💡 TIPS:反向代理,实现免端口访问 NAS

如果通过端口映射、内网穿透的方式访问 NAS,每次访问都需要输入 http://域名:5000 这种形式的网址才能访问,如果一些服务不支持这种带端口的链接就会造成麻烦。所以有人会希望将端口隐去,直接访问 http://域名 就能获取到想要的网址,这就需要用到反向代理。

  • 代理服务:简称为代理,本机和服务器进行数据交换时,利用一个中间设备进行非直接的连接,从而隐藏真实的信息。将 Proxy 翻译成代理很接近字面意思。
  • 正向代理:使用本地设备 → 正向代理 → 目标服务器 → 返回内容,这样可以绕过限制访问目标服务器,同时能够隐藏本机的信息,代理的对象是「客户端」。这个应用场景大家都懂,不过这里用不到,需要使用反向代理。
  • 反向代理:使用本地设备 → 反向代理 → 代理找到多个目标服务器中的一个 → 返回内容。类似于打客服电话,电话会被分配到不同的接线员,但你不清楚接线员的具体身份。代理的对象是「服务端」,也就是 NAS。这样做的好处主要是安全加密、负载均衡、外网发布,这里用到的作用就是外网发布

反向代理这个词确实很不容易理解,这里一并解释了代理服务和正向代理是什么。

简单的说,反向代理就是为 NAS 上的各种服务(像是原本需要记住端口号的网页服务、WebDAV、FTP 服务)做一个配置,像给 10086 打客服电话一样,访问一个网址就能实现自动跳转。

最终实现的效果类似这样:访问 https://powerplus.myds.me/admin 实际进入的是 https://powerplus.myds.me:5000 这个页面。省去了 5000 这个端口。

这确实是一个很小的功能点,它的主要价值是「绕开国内对 80 端口的封锁」,让外部用户能像访问普通网站一样,访问自己的 NAS。

具体操作:

  1. 在「控制面板 - Synology 应用程序门户 - 反向代理服务器」中新增一条规则。
  2. 规则中需要填写来源主机名(域名)和端口、目的地主机名(被代理的 IP)和端口。比如这样填写:
来源
协议:HTTPS
主机名:nas.sspainas.com
端口:443

目的地
协议:HTTPS
主机名:192.168.1.200
端口:5001

就能在访问 https://nas.sspainas.com 时跳转到 5001 端口所在的管理界面了。

https://cdn.sspai.com/2020/12/09/fa004b9175354076e59548d9f83f0cba.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

反向代理配置

反向代理还可以通过 nginx 等方案进行配置。

外网访问与分享文件技巧

有了外网访问功能,就可以在所有手机端应用中输入域名了,但有时候会因为传输速度较慢,为了提高速度,可以在手机端应用中输入包括端口名称的 IP 地址,通常是 nas.allen.com:5000 这种形式,以此来提高访问速度。

有了外网 IP 之后,就可以通过 Drive 对外分享文件了。但是由于端口号的存在,生成出来的链接就出现了错误。其实你完全可以选择让它是否带上端口号。

在「Synology Drive 管理控制台 - 设置 -其他 - 自定义共享链接」中,启用自定义共享链接,来设置一个带端口号的外网 IP。这样每次生成出来的链接就可以直接分享给外部人员了。

https://cdn.sspai.com/2020/12/09/cf4b729f5aab93179780113640bb3519.png?imageView2/2/w/1120/q/90/interlace/1/ignore-error/1

自定义域

总结

很多人总希望能三言两语讲清楚「远程访问 NAS」这件事情,实在是难度很高。因为各种名词的意思都需要解释,不同的情况需要考虑不同的对策,各个环节出现的问题也是千奇百怪。要总结出一套适用于每个人的方案实属不易。

本文的内容密度相当高,出现了大量平时不易涉及到的名词和概念。如果能理解其背后的含义和用途,会有助于更快完成远程访问的配置工作,并能通过正确的思路解决问题。

这一章可能是整个教程中最为复杂的一部分内容。我希望大家看完这一章节的内容,能够对外部访问这件事情有一个更清晰完整的认识,而不是只会跟着教程做。

学会了远程访问 NAS,NAS 才算是真正成为了一台家庭服务器,能在任意时间任意地点进行访问。

在接下来的文章中,我们将会介绍 NAS 的更多实际用途,相信有了远程访问的加成,NAS 的体验会变得更棒。